const dayjs = require('dayjs');
/**
 * 日期时间统一工具类
 * 统一引用主date_helper模块，确保整个项目使用一致的日期时间处理
 */

// 直接引用主date_helper模块
const dateHelper = require('../../store/helpers/date_helper');

// 基础方法提供兼容性引用
module.exports = {
  // dayjs实例
  dayjs: dateHelper.getDayjs(),
  
  // 基础函数
  format: dateHelper.format,
  now: dateHelper.now,
  timestamp: dateHelper.timestamp,
  fromTimestamp: dateHelper.fromTimestamp,
  timeAgo: dateHelper.timeAgo,
  
  // 兼容原time_helper.js的函数
  time: function(fmt = '', timestamp = null) {
    if (!fmt) return Math.round(dayjs().valueOf() / 1000); // 返回时间戳
    
    const formatMap = {
      'Y': 'YYYY',
      'M': 'MM',
      'D': 'DD',
      'h': 'HH',
      'm': 'mm',
      's': 'ss'
    };

    // 转换格式
    let dayjsFmt = fmt;
    for (const key in formatMap) {
      dayjsFmt = dayjsFmt.replace(key, formatMap[key]);
    }

    // 处理特殊格式
    if (fmt === 'YMD') dayjsFmt = 'YYYYMMDD';
    if (fmt === 'YMDhms') dayjsFmt = 'YYYYMMDDHHmmss';
    
    return dateHelper.format(timestamp ? timestamp * 1000 : null, dayjsFmt);
  },
  
  timestamp2Time: function(timestamp, fmt = 'Y-M-D h:m:s') {
    if (!timestamp) return '';
    
    const formatMap = {
      'Y': 'YYYY',
      'M': 'MM',
      'D': 'DD',
      'h': 'HH',
      'm': 'mm',
      's': 'ss'
    };

    // 转换格式
    let dayjsFmt = fmt;
    for (const key in formatMap) {
      dayjsFmt = dayjsFmt.replace(key, formatMap[key]);
    }
    
    return dateHelper.format(timestamp * 1000, dayjsFmt);
  },
  
  time2Timestamp: function(date) {
    if (!date) return 0;
    return Math.floor(dateHelper.getDayjs(date).valueOf() / 1000);
  },
  
  timestame2Ago: dateHelper.timeAgo,
  
  week: function(date) {
    if (!date) return '';
    return dateHelper.weekday(date, true).replace('周', '星期');
  },
  
  getMonthFirstTimestamp: function(timestamp = null) {
    const date = timestamp ? timestamp * 1000 : null;
    return Math.floor(dateHelper.startOf(date, 'month').getTime() / 1000);
  },
  
  getMonthLastTimestamp: function(timestamp = null) {
    const date = timestamp ? timestamp * 1000 : null;
    return Math.floor(dateHelper.endOf(date, 'month').getTime() / 1000);
  },
  
  getDayFirstTimestamp: function(timestamp = null) {
    const date = timestamp ? timestamp * 1000 : null;
    return Math.floor(dateHelper.startOf(date, 'day').getTime() / 1000);
  },
  
  getAge: function(timestamp) {
    if (!timestamp) return '';
    return dateHelper.diff(dayjs(), timestamp * 1000, 'year');
  },
  
  getNowMinTimestamp: function() {
    return Math.floor(dateHelper.startOf(null, 'day').getTime() / 1000);
  },
  
  simpleDate: function(timestamp = null) {
    return dateHelper.format(timestamp ? timestamp * 1000 : null, 'YYYY.MM.DD');
  },
  
  fmtDateCHN: function(timestamp = null) {
    return dateHelper.formatCN(timestamp ? timestamp * 1000 : null, false);
  },
  
  fmtDateCN: function(timestamp = null) {
    return dateHelper.formatCN(timestamp ? timestamp * 1000 : null, false);
  },
  
  fmtDateTimeCN: function(timestamp = null) {
    return dateHelper.formatCN(timestamp ? timestamp * 1000 : null, true);
  },
  
  getTimeLeft: function(second) {
    if (!second) return '';
    
    const days = Math.floor(second / 86400);
    const hours = Math.floor((second % 86400) / 3600);
    const minutes = Math.floor((second % 3600) / 60);
    const seconds = second % 60;
    
    if (days > 0)
      return `${days}:${hours}:${minutes}:${seconds}`;
    else if (hours > 0)
      return `${hours}:${minutes}:${seconds}`;
    else if (minutes > 0)
      return `${minutes}:${seconds}`;
    else
      return seconds.format("YYYY-MM-DD HH:mm:ss");
  },
  
  // 高级工具类
  DateTimeUtil: {
    /**
     * 获取当前时间
     * @returns {Object} dayjs对象
     */
    now() {
      return dateHelper.now();
    },
    
    /**
     * 格式化日期
     * @param {Date|String|Number} date 日期
     * @param {String} format 格式
     * @returns {String} 格式化后的日期字符串
     */
    format(date, format = 'YYYY-MM-DD HH:mm:ss') {
      return dateHelper.format(date, format);
    },
    
    /**
     * 计算两个日期之间的差值
     * @param {Date|String|Number} date1 日期1
     * @param {Date|String|Number} date2 日期2
     * @param {String} unit 单位：'second'|'minute'|'hour'|'day'|'month'|'year'
     * @returns {Number} 差值
     */
    diff(date1, date2, unit = 'day') {
      return dateHelper.diff(date1, date2, unit);
    },
    
    /**
     * 增加时间
     * @param {Date|String|Number} date 日期
     * @param {Number} value 增加的值
     * @param {String} unit 单位：'second'|'minute'|'hour'|'day'|'month'|'year'
     * @returns {Object} 新的dayjs对象
     */
    add(date, value, unit = 'day') {
      return dateHelper.add(date, value, unit);
    },
    
    /**
     * 减少时间
     * @param {Date|String|Number} date 日期
     * @param {Number} value 减少的值
     * @param {String} unit 单位：'second'|'minute'|'hour'|'day'|'month'|'year'
     * @returns {Object} 新的dayjs对象
     */
    subtract(date, value, unit = 'day') {
      return dateHelper.subtract(date, value, unit);
    },
    
    /**
     * 判断日期是否有效
     * @param {Date|String|Number} date 日期
     * @returns {Boolean} 是否有效
     */
    isValid(date) {
      return dateHelper.getDayjs(date).isValid();
    },
    
    /**
     * 判断是否是同一天
     * @param {Date|String|Number} date1 日期1
     * @param {Date|String|Number} date2 日期2
     * @returns {Boolean} 是否相同
     */
    isSameDay(date1, date2) {
      return dateHelper.isSame(date1, date2, 'day');
    },
    
    /**
     * 判断日期1是否在日期2之后
     * @param {Date|String|Number} date1 日期1
     * @param {Date|String|Number} date2 日期2
     * @returns {Boolean} 是否在之后
     */
    isAfter(date1, date2) {
      return dateHelper.getDayjs(date1).isAfter(dateHelper.getDayjs(date2));
    },
    
    /**
     * 判断日期1是否在日期2之前
     * @param {Date|String|Number} date1 日期1
     * @param {Date|String|Number} date2 日期2
     * @returns {Boolean} 是否在之前
     */
    isBefore(date1, date2) {
      return dateHelper.isBefore(date1, date2);
    }
  }
}; 